<template>
  <div class="menus-manage">
    <!-- 面包屑 -->
    <div class="bread-crumbs">
      <el-breadcrumb separator="/">
        <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
        <el-breadcrumb-item>财务报销</el-breadcrumb-item>
        <el-breadcrumb-item>差旅报销</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
    <div class="main-middle">
      <el-card class="box-card">
        <!-- 差旅报销 -->
        <!-- <div class="card-title" v-if="!showDatas">差旅报销</div> -->
        <el-form label-width="100px" :model="editForm" prop="day" :disabled="showDatas" v-if="!showDatas">
          <el-button @click="addTravel" class="enter_btn">添加差旅信息</el-button>
            <el-table height="300" border :data="travelList">
              <el-table-column
                type="index"
                label="序号"
                align="center"
                width="50">
              </el-table-column>
              <el-table-column label="报销人" align="center" width="165" v-if="isClaimant">
                <template slot-scope="scope">
                  <el-select v-model="travelList[scope.$index].travelId"  @change="handleReiChange" style="width:100%;" clearable filterable  :remote-method="remoteMethod" :loading="loading" remote>
                    <el-option
                      v-for="item in options"
                      :key="item.userId"
                      :label="`${item.userName}-${item.userId}`"
                      :value="`${item.userId}-${item.userName}+${item.deptName}`"
                    ></el-option>
                  </el-select>
                </template>
              </el-table-column>
              <el-table-column label="关联项目" align="center" width="165">
                <template slot-scope="scope">
                  <el-select v-model="travelList[scope.$index].proId"  @change="handleChange($event, scope.$index)" style="width:100%;" clearable filterable>
                    <el-option
                      v-for="item in travelList[scope.$index].proList"
                      :key="item.id"
                      :label="item.proName"
                      :value="item.id"
                    ></el-option>
                  </el-select>
                </template>
              </el-table-column>
            <el-table-column label="开始时间" align="center" width="220">
              <template slot-scope="scope">
                <el-date-picker
                  style="width:100%;"
                  v-model="travelList[scope.$index].startTime"
                  type="datetime"
                  placeholder="选择日期时间">
                </el-date-picker>
              </template>
            </el-table-column>
            <el-table-column label="结束时间" align="center" width="220">
              <template slot-scope="scope">
                <el-date-picker
                  style="width:100%;"
                  v-model="travelList[scope.$index].endTime"
                  type="datetime"
                  placeholder="选择日期时间">
                </el-date-picker>
              </template>
            </el-table-column>
            <el-table-column label="出发地" width="200">
              <template slot-scope="scope">
                <el-input v-model="travelList[scope.$index].departure"></el-input>
              </template>
            </el-table-column>
            <el-table-column label="目的地" width="200">
              <template slot-scope="scope">
                <el-input v-model="travelList[scope.$index].destination"></el-input>
              </template>
            </el-table-column>
            <el-table-column label="客户单位" width="200">
              <template slot-scope="scope">
                <el-input v-model="travelList[scope.$index].cusComp"></el-input>
              </template>
            </el-table-column>
            <el-table-column label="事由" width="300">
              <template slot-scope="scope">
                <el-input v-model="travelList[scope.$index].items"></el-input>
              </template>
            </el-table-column>
            <el-table-column label="火车/汽车" width="220" align="center">
              <template slot-scope="scope">
                <el-input-number v-model="travelList[scope.$index].bus" :precision="2" :min="0"></el-input-number>
              </template>
            </el-table-column>
            <el-table-column label="飞机" width="220" align="center">
              <template slot-scope="scope">
                <el-input-number v-model="travelList[scope.$index].plane" :precision="2" :min="0"></el-input-number>
              </template>
            </el-table-column>
            <el-table-column label="交通费" width="220" align="center">
              <template slot-scope="scope">
                <el-input-number v-model="travelList[scope.$index].traffic" :precision="2" :min="0"></el-input-number>
              </template>
            </el-table-column>
            <el-table-column label="招待费" width="220" align="center">
              <template slot-scope="scope">
                <el-input-number v-model="travelList[scope.$index].fete" :precision="2" :min="0"></el-input-number>
              </template>
            </el-table-column>
            <el-table-column label="其他" width="220" align="center">
              <template slot-scope="scope">
                <el-input-number v-model="travelList[scope.$index].other" :precision="2" :min="0"></el-input-number>
              </template>
            </el-table-column>
            <el-table-column label="住宿费" width="220" align="center">
              <template slot-scope="scope">
                <el-input-number v-model="travelList[scope.$index].hotel" :precision="2" :min="0"></el-input-number>
              </template>
            </el-table-column>
            <el-table-column label="出差天数" width="200">
              <template slot-scope="scope">
                <el-input v-model="travelList[scope.$index].daySize" onkeyup="if(this.value=='00'){this.value='0';}else{this.value=this.value.replace(/[^0-9]/g,'')}">
                  <template slot="append">天</template>
                </el-input>
              </template>
            </el-table-column>
            <!-- <el-table-column label="餐补" width="220" align="center">
              <template slot-scope="scope">
                <el-input-number v-model="travelList[scope.$index].meal" :precision="2" :min="0"></el-input-number>
              </template>
            </el-table-column> -->
            <el-table-column label="出差补助" width="220" align="center">
              <template slot-scope="scope">
                <el-input-number v-model="travelList[scope.$index].subsidy" :precision="2" :min="0"></el-input-number>
              </template>
            </el-table-column>
            <el-table-column label="小计" width="150" fixed="right">
              <template slot-scope="scope">
               ¥ {{ travelList[scope.$index].subtotal = (travelList[scope.$index].bus || 0) + (travelList[scope.$index].plane || 0) + (travelList[scope.$index].traffic || 0) + (travelList[scope.$index].other || 0) + (travelList[scope.$index].hotel || 0) + (travelList[scope.$index].subsidy || 0) + (travelList[scope.$index].fete || 0)}} 元
              </template>
            </el-table-column>
            <el-table-column label="操作" width="80" align="center" fixed="right">
              <template slot-scope="scope">
                <el-button size="mini" @click="deleteRowTravelData(scope.$index)" type="danger">
                  删除
                </el-button>
              </template>
            </el-table-column>
          </el-table>
          <el-divider></el-divider>
          <!-- <el-form-item label="关联项目">
            <el-select v-model="editForm.proId"  @change="handleChange" style="width:100%;" clearable filterable>
              <el-option
                v-for="item in proList"
                :key="item.id"
                :label="item.proName"
                :value="item.id"
              ></el-option>
            </el-select>
          </el-form-item> -->
          <el-row>
            <el-col :span="12">
              <el-form-item label="报销单据">
                <el-input placeholder="请输入具体数值" v-model="editForm.formNumber" onkeyup="if(this.value=='00'){this.value='0';}else{this.value=this.value.replace(/[^0-9]/g,'')}">
                  <template slot="append">张</template>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="附件上传">
                <input type="file" />
                <el-button
                  type="success"
                  size="mini"
                  @click="downFile"
                  v-if="!isSetUp"
                >下载</el-button>
              </el-form-item>
            </el-col>
          </el-row>
          <el-form-item label="报销事由">
            <el-input type="textarea" :rows="3" v-model="editForm.reason"></el-input>
          </el-form-item>
          <el-form-item label="备注：" style="margin-top:20px;margin-bottom:0px">
            <p style="line-height: 20px;">
              1.市内交通费：一类、二类地区（60元/天），三类地区（50元/天）；<br>
              2.住宿标准：一类地区（300元），二类地区（250元），三类地区（200元）；<br>
              3.出差生活补助：80元/天；<br>
              4.包干费用标准：一类地区（300元/天），二类地区（240元/天），三类地区（190元/天）；<br>
              5.半天时间节点规定：北京时间13:00为界；<br>

              以上标准仅适用非客户付费差旅报销，详见《浩方信息差旅规定V4.1》</p>
          </el-form-item>
          <el-divider v-if="isReview"></el-divider>
          <el-form-item label="审批意见"  v-if="isReview">
            <el-input type="textarea" :rows="3" placeholder="审批意见(20字以内)" v-model="editForm.note"></el-input>
          </el-form-item>
          <!-- <el-form-item label="优先级">
            <el-radio-group v-model="editForm.flowPriority">
              <el-radio label="0">普通</el-radio>
              <el-radio label="1">重要</el-radio>
              <el-radio label="2">紧急</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-form-item label="消息推送">
            <el-checkbox-group v-model="editForm.msgPush">
              <el-checkbox label="1">站内消息通知</el-checkbox>
              <el-checkbox label="2">企业微信通知</el-checkbox>
              <el-checkbox label="3">邮件通知</el-checkbox>
            </el-checkbox-group>
          </el-form-item> -->
        </el-form>
        <!-- 部门发起-->
        <div id="single" class="single" v-if="showDatas && isClaimant">
          <div v-for="(item, index) in travelList" :key="index" :class="isProTitle ? 'no-invoice-box' : 'invoice-box'">
            <h6>上海浩方信息有限公司</h6>
            <h5>差旅费报销审批单</h5>
            <table>
              <tbody>
                <tr>
                  <td class="title">姓名</td>
                  <td colspan="4">{{(item.travelId.split('-')[1]).split('+')[0] }} [{{item.travelId.split('-')[0]}}]</td>
                  <td class="title">部门 </td>
                  <td colspan="6">{{ (item.travelId.split('-')[1]).split('+')[1]}}</td>
                  <td class="title">单据号</td>
                  <td colspan="6">{{ editForm.formNo }}{{ echoDatas.createTime | filterTime }}{{index + 1}}</td>
                </tr>
                <tr>
                  <td class="title" colspan="1">申请日期</td>
                  <td colspan="18">{{ echoDatas.createTime | dayTime }}</td>
                </tr>
                <tr>
                  <td class="title"></td>
                  <td class="title" colspan="1">出差人信息</td>
                  <td class="title" colspan="2">出差日期</td>
                  <td class="title" colspan="4">出差内容</td>
                  <td class="title" colspan="2">车票</td>
                  <td class="title" colspan="3">其他费用</td>
                  <td class="title"></td>
                  <td class="title" colspan="3">补助</td>
                  <td class="title">金额</td>
                </tr>
                <tr>
                  <td class="title">序号</td>
                  <td class="title">关联项目</td>
                  <td class="title">起始时间</td>
                  <td class="title">终止时间</td>
                  <td class="title">出发地</td>
                  <td class="title">目的地</td>
                  <td class="title">客户单位</td>
                  <td class="title">事由</td>
                  <td class="title">火车/汽车</td>
                  <td class="title">飞机</td>
                  <td class="title">交通费</td>
                  <td class="title">招待费</td>
                  <td class="title">其他</td>
                  <td class="title">住宿费</td>
                  <td class="title">出差天数</td>
                  <td class="title">餐补</td>
                  <td class="title">出差补助</td>
                  <td class="title">小计</td>
                </tr>
                <tr>
                  <td>{{index + 1}}</td>
                  <td>{{item.proName }}</td>
                  <td>{{item.startTime | hourTime }}</td>
                  <td>{{item.endTime | hourTime }}</td>
                  <td>{{item.departure}}</td>
                  <td>{{item.destination}}</td>
                  <td>{{item.cusComp}}</td>
                  <td>{{item.items}}</td>
                  <td>{{item.bus ? item.bus.toFixed(2) : '0.00'}}</td>
                  <td>{{item.plane ? item.plane.toFixed(2) : '0.00'}}</td>
                  <td>{{item.traffic ? item.traffic.toFixed(2) : '0.00'}}</td>
                  <td>{{item.fete ? item.fete.toFixed(2) : '0.00'}}</td>
                  <td>{{item.other ? item.other.toFixed(2) : '0.00'}}</td>
                  <td>{{item.hotel ? item.hotel.toFixed(2) : '0.00'}}</td>
                  <td>{{item.daySize}}</td>
                  <td>0.00</td>
                  <td>{{item.subsidy ? item.subsidy.toFixed(2) : '0.00'}}</td>
                  <td>{{item.subtotal ? item.subtotal.toFixed(2) : '0.00'}}</td>
                </tr>
                <tr>
                  <td class="title">金额大写</td>
                  <td colspan="8">{{item.capital}}</td>
                  <td class="title">金额合计</td>
                  <td colspan="9">{{item.subtotal.toFixed(2)}}</td>
                </tr>
                <tr>
                  <td class="title">报销单据</td>
                  <td colspan="18">{{editForm.formNumber}}</td>
                </tr>
                <tr>
                  <td class="title">附件</td>
                  <td colspan="18"><label @click="downFile" v-if="editForm.filePath !== ''">下载</label></td>
                </tr>
                <tr>
                  <td colspan="19">备注：<br/>
                  1.市内交通费：一类、二类地区（60元/天），三类地区（50元/天）；<br>
                  2.住宿标准：一类地区（300元），二类地区（250元），三类地区（200元）；<br>
                  3.出差生活补助：80元/天；<br>
                  4.包干费用标准：一类地区（300元/天），二类地区（240元/天），三类地区（190元/天）；<br>
                  5.半天时间节点规定：北京时间13:00为界；<br>
                  以上标准仅适用非客户付费差旅报销，详见《浩方信息差旅规定V4.1》
                  </td>
                </tr>
              </tbody>
            </table>
            <div class="signatureBox" v-if="isPrint">
              <span>申请人：{{editForm.compDeptUser.code[4]}}</span>
              <span>部门领导：</span>
              <span>财务审核：{{finManager}}</span>
              <span>核准：</span>
              <span>领款人(签字)：________________</span>
            </div>
            <el-divider>--------    --------    --------    --------    --------</el-divider>
          </div>
        </div>
        <!-- 个人发起-->
        <div id="single" class="single" v-if="showDatas && !isClaimant">
          <h6>上海浩方信息有限公司</h6>
          <h5>差旅费报销审批单</h5>
          <table>
            <tbody>
              <tr>
                <td class="title">姓名</td>
                <td colspan="3">{{ editForm.compDeptUser.code[4] }} [{{editForm.compDeptUser.code[2]}}]</td>
                <td class="title">部门 </td>
                <td colspan="6">{{   isProTitle ? editForm.compDeptUser.code[3] : '' }}</td>
                <td class="title">单据号</td>
                <td colspan="6">{{ editForm.formNo }}{{ echoDatas.createTime | filterTime }}</td>
              </tr>
              <tr>
                <td class="title" colspan="4">申请日期</td>
                <td colspan="14">{{ echoDatas.createTime | dayTime }}</td>
              </tr>
              <tr>
                <td class="title"></td>
                <td class="title" colspan="1">出差人信息</td>
                <td class="title" colspan="2">出差日期</td>
                <td class="title" colspan="4">出差内容</td>
                <td class="title" colspan="2">车票</td>
                <td class="title" colspan="3">其他费用</td>
                <td class="title"></td>
                <td class="title" colspan="3">补助</td>
                <td class="title">金额</td>
              </tr>
              <tr>
                <td class="title">序号</td>
                <td class="title">关联项目</td>
                <td class="title">起始时间</td>
                <td class="title">终止时间</td>
                <td class="title">出发地</td>
                <td class="title">目的地</td>
                <td class="title">客户单位</td>
                <td class="title">事由</td>
                <td class="title">火车/汽车</td>
                <td class="title">飞机</td>
                <td class="title">交通费</td>
                <td class="title">招待费</td>
                <td class="title">其他</td>
                <td class="title">住宿费</td>
                <td class="title">出差天数</td>
                <td class="title">餐补</td>
                <td class="title">出差补助</td>
                <td class="title">小计</td>
              </tr>
              <tr v-for="(item, index) in editForm.travelList" :key="index">
                <td>{{index + 1}}</td>
                <td>{{  isProTitle ? item.proName : ''}}</td>
                <td>{{item.startTime | hourTime }}</td>
                <td>{{item.endTime | hourTime }}</td>
                <td>{{item.departure}}</td>
                <td>{{item.destination}}</td>
                <td>{{item.cusComp}}</td>
                <td>{{item.items}}</td>
                <td>{{item.bus ? item.bus.toFixed(2) : '0.00'}}</td>
                <td>{{item.plane ? item.plane.toFixed(2) : '0.00'}}</td>
                <td>{{item.traffic ? item.traffic.toFixed(2) : '0.00'}}</td>
                <td>{{item.fete ? item.fete.toFixed(2) : '0.00'}}</td>
                <td>{{item.other ? item.other.toFixed(2) : '0.00'}}</td>
                <td>{{item.hotel ? item.hotel.toFixed(2) : '0.00'}}</td>
                <td>{{item.daySize}}</td>
                <td>0.00</td>
                <td>{{item.subsidy ? item.subsidy.toFixed(2) : '0.00'}}</td>
                <td>{{item.subtotal ? item.subtotal.toFixed(2) : '0.00'}}</td>
              </tr>
              <tr>
                <td class="title">金额大写</td>
                <td colspan="8">{{editForm.capital}}</td>
                <td class="title">金额合计</td>
                <td colspan="9">{{editForm.sumMoney.toFixed(2)}}</td>
              </tr>
              <tr>
                <td class="title">报销单据</td>
                <td colspan="18">{{editForm.formNumber}}</td>
              </tr>
              <tr>
                <td class="title">附件</td>
                <td colspan="18"><label @click="downFile" v-if="editForm.filePath !== ''">下载</label></td>
              </tr>
              <tr>
                <td colspan="19">备注：<br/>
                1.市内交通费：一类、二类地区（60元/天），三类地区（50元/天）；<br>
                2.住宿标准：一类地区（300元），二类地区（250元），三类地区（200元）；<br>
                3.出差生活补助：80元/天；<br>
                4.包干费用标准：一类地区（300元/天），二类地区（240元/天），三类地区（190元/天）；<br>
                5.半天时间节点规定：北京时间13:00为界；<br>
                以上标准仅适用非客户付费差旅报销，详见《浩方信息差旅规定V4.1》
                </td>
              </tr>
            </tbody>
          </table>
          <div class="signatureBox" v-if="isPrint">
            <span>申请人：{{editForm.compDeptUser.code[4]}}</span>
            <span>部门领导：</span>
            <span>财务审核：{{finManager}}</span>
            <span>核准：</span>
            <span>领款人(签字)：________________</span>
          </div>
        </div>
        <el-form label-width="100px" v-if="isReview">
         <el-row>
            <el-divider v-if="isReview"></el-divider>
            <el-col>
              <el-form-item label="审批意见"  v-if="isReview">
                <el-input type="textarea" :rows="3" placeholder="审批意见(20字以内)" v-model="editForm.note"></el-input>
              </el-form-item>
            </el-col>
            <el-col>
              <!-- <el-form-item label="优先级">
                <el-radio-group v-model="editForm.flowPriority">
                  <el-radio label="0">普通</el-radio>
                  <el-radio label="1">重要</el-radio>
                  <el-radio label="2">紧急</el-radio>
                </el-radio-group>
              </el-form-item>
            </el-col>
            <el-col>
              <el-form-item label="消息推送">
                <el-checkbox-group v-model="editForm.msgPush">
                  <el-checkbox label="1">站内消息通知</el-checkbox>
                  <el-checkbox label="2">企业微信通知</el-checkbox>
                  <el-checkbox label="3">邮件通知</el-checkbox>
                </el-checkbox-group>
              </el-form-item> -->
            </el-col>
          </el-row>
        </el-form>
        <div class="card-line">
          <!-- 立即申请 -->
          <el-button type="primary" size="small" @click="onSubmit" :disabled="isSubmit" v-if="isSetUp">立即申请</el-button>
          <!-- 重置 初始化表单数据 -->
          <el-button size="small" @click="save" :disabled="isSubmit" v-if="isSetUp">暂存草稿</el-button>
            <!-- 修改编辑 -->
          <el-button type="primary"  size="small" @click="edit" :disabled="isSubmit" v-if="isEditForm">修改编辑</el-button>
             <!-- 重置 初始化表单数据 -->
          <el-button type="success" size="small" @click="agreed" :disabled="isSubmit" v-if="isReview">通过</el-button>
            <!-- 修改编辑 -->
          <el-button type="warning"  size="small" @click="refused" :disabled="isSubmit" v-if="isReview">驳回</el-button>
          <!-- 打印 -->
          <el-button size="mini" icon="el-icon-printer" class="printBtn" v-print="'single'" v-if="isPrint" @click="prints">打印</el-button>
          <!-- 返回 -->
          <el-button class="clean-both" size="small" style="float:right" @click="goBack">返回</el-button>
          <div class="clean-both"></div>
        </div>
      </el-card>
    </div>
  </div>
</template>

<script>
// 引入金额大写转换
import { digitUppercase } from '../digitUppercase';
import moment from 'moment';
export default {
  data () {
    return {
      // 打印时不显示关联项目
      isProTitle: true,
      // 是否隐藏报销人一栏
      isClaimant: true,
      // 项目经理
      proMsgId: [],
      // 报销人数据下拉
      options: [],
      // 查看表单数据
      showDatas: false,
      // 是否申请
      isSetUp: true,
      // 是否修改
      isEditForm: false,

      // 是否审查
      isReview: false,
      // 是否打印
      isPrint: false,

      isSubmit: false,
      editForm: {
        // pmp: '',
        // 差旅报销单
        // 单据编号
        formNo: '',
        // 付款日期
        paymentDay: '',
        // 项目ID
        // proId: '',
        // 项目名称
        proName: '',
        // 报销人信息
        compDeptUser: '',
        // 流程申请日期
        flowDay: '',
        // 报销单据
        formNumber: 0,
        // 附件
        filePath: '',
        // 合计费用
        sumMoney: 0,
        // 合计费用大写
        capital: '',
        // 小计
        subtotal: '',
        // 报销事由
        reason: '',
        // 优先级
        // flowPriority: '0',
        // 出差天数
        daySize: 0
        // 消息通知
        // msgPush: []
      },
      users: [],
      // 差旅费用项
      travelList: [],
      // 所有关联项目
      proList: [],
      // 回显单据打印值
      echoDatas: {},
      // 审批处理历史
      historyLog: [],
      // 财务经理回显
      finManager: '',
      // 部门领导、核准人回显
      approver: '',
      // 当前申请人所在部门角色池领导
      rolesList: [],
      // 当前节点的id
      currentNodeId: '',
      // 当前人的id
      firstCurrentRole: '',
      secondCurrentRole: '',
      thirdCurrentRole: '',
      fourCurrentRole: '',
      fiveCurrentRole: '',
      sixCurrentRole: '',
      sevenCurrentRole: '',
      // 下一个节点人的id
      nextRole: '',
      // 下一个节点的id
      nextNodeId: '',
      // 是否继续请求
      isRequire: true,

      newflowCurrentNode: '',
      newflowCurrentUser: '',
      // 节点压缩后的审批节点，审批人
      globalParams: {
        globalFlowCurrentNode: '',
        globallowCurrentUser: ''
      }
    };
  },
  // 过滤器
  filters: {
    // 时间显示过滤
    filterTime (value) {
      return moment(value).format('X');
    },
    dayTime (value) {
      return moment(value).format('YYYY-MM-DD');
    },
    hourTime (value) {
      return moment(value).format('YYYY-MM-DD HH:mm:ss');
    },
    // 节点过滤
    filterNode (value, datas) {
      if (datas.length > 0) {
        let lists = JSON.parse(datas);
        for (let i = 0; i < lists.nodes.length; i++) {
          if (lists.nodes[i].id === value) {
            return lists.nodes[i].label;
          }
        }
      }
    },
    // 审批人过滤
    getName (value, params) {
      for (let i = 0; i < params.length; i++) {
        if (params[i].userId === value) {
          return params[i].userName;
        }
      }
    }
  },
  methods: {
    // 获取报销人下拉数据
    remoteMethod (query) {
      if (query !== '') {
        this.loading = true;
        let params = {
          userName: query
        };
        this.$http.post('api/findUserByName', params).then(res => {
          let { code, datas } = res;
          // 判断Code状态
          if (code === 0) {
            // 初始化列表
            setTimeout(() => {
              this.loading = false;
              this.options = datas;
            }, 200);
          }
        }).catch(err => {
          if (err === undefined) {
            this.$message({
              message: '服务器响应异常！',
              type: 'error'
            });
            return false;
          }
        });
      } else {
        this.options = [];
      }
    },
    // 表单附件 - 下载
    downFile () {
      let _this = this;
      // 获取下载文件路径
      let url = _this.editForm.filePath;
      // 判断文件是否存在
      if (url === '' || url === null || url === undefined) {
        _this.$message({
          message: '抱歉，没有文件可供下载！',
          type: 'error'
        });
      } else {
        // 路径斜杆转换反斜杠
        url = url.replace(/\\/g, '/');
        // 截取文件类型
        let start = url.lastIndexOf('.');
        let end = url.length;
        let type = url.slice(start, end);

        // 请求下载文件
        _this.$http.download('api/downLoadFile?filePath=' + url).then(function (res) {
          // new Blob([data])用来创建URL的file对象或者blob对象
          let url = window.URL.createObjectURL(new Blob([res]));
          // 创建下载标签
          let link = document.createElement('a');
          link.style.display = 'none';
          link.href = url;
          // 动态文件名 + 文件类型
          link.download = '附件' + '.' + type;
          document.body.appendChild(link);
          // 执行下载
          link.click();
          // 释放掉blob对象
          window.URL.revokeObjectURL(link.href);
          // 下载完成移除元素
          document.body.removeChild(link);
        }).catch(err => {
          if (err === undefined) {
            _this.$message({
              message: '服务器响应异常！',
              type: 'error'
            });
            return false;
          }
        });
      }
    },

    addTravel () {
      this.travelList.push({
        // 报销人
        travelId: '',
        // 关联项目数据
        proList: [],
        // 项目名称
        proName: '',
        // 开始时间
        startTime: '',
        // 结束时间
        endTime: '',
        // 出发地
        departure: '',
        // 目的地
        destination: '',
        // 客户单位
        cusComp: '',
        // 事由
        items: '',
        // 火车/汽车
        bus: 0,
        // 飞机
        plane: 0,
        // 交通费
        traffic: 0,
        // 招待费
        fete: 0,
        // 其他
        other: 0,
        // 住宿
        hotel: 0,
        // 餐补
        meal: 0,
        // 出差天数
        daySize: 0,
        // 出差补助
        subsidy: 0,
        // 小计
        subtotal: 0,
        // 金额大写
        capital: '',
        // 报销单据
        invoiceNum: ''
      });
      setTimeout(() => {
        this.getSingleMsg();
      }, 1000);
    },

    deleteRowTravelData (index) {
      this.travelList.splice(index, 1);
    },

    // 获取选择报销人姓名
    handleReiChange (val) {
      let _this = this;
      let newVal = val.split('-')[0];
      _this.getProList(newVal);
    },
    // 获取选择项目名称
    handleChange (val, index) {
      let _this = this;
      let obj;
      obj = _this.travelList[index].proList.find(item => { // 这里的userList就是上面遍历的数据源
        return item.id === val; // 筛选出匹配数据
      });
      _this.travelList[index].proName = obj.proName;
    },
    // 审批历史
    history: function (flowCode, rowDbList) {
      let _this = this;
      let params = {
        flowCode
      };
      _this.$http.post('api/findWorkResultList', params).then(res => {
        let { code, datas } = res;
        // 判断Code状态
        if (code === 0) {
          _this.historyLog = datas;
          // let formJson = JSON.parse(rowDbList.formJson);
          let flowJson = rowDbList.flowJson;
          let lists = JSON.parse(flowJson).nodes;
          // 查找财务经理的节点
          // let flowId = '';
          for (let i = 0; i < lists.length; i++) {
            if (lists[i].label === '财务经理审批') {
              // 查找财务经理名字
              _this.users.map(item => {
                if (item.userId === lists[i].users.join(',')) {
                  _this.finManager = item.userName;
                }
              });
            }
          }
          // 查找部门领导
          _this.rolesList.map(item => {
            if (item.roleName === '部门总监') {
              _this.approver = item.userName;
            }
          });
          // 到角色池内寻找金额
          // let deptId = formJson.compDeptUser.code[1];
          // let deptRole = {
          //   deptId
          // };
          // // 判断当前节点角色授权金额是否满足
          // _this.$http.raw('/api/findUserRoles', deptRole).then(res => {
          //   let { code, datas } = res;
          //   // 判断Code状态
          //   if (code === 0) {
          //     for (let j = 0; j < datas.length; j++) {
          //       if (_this.editForm.sumMoney > datas[j].money && _this.editForm.sumMoney < datas[j + 1].money) {
          //         _this.approver = datas[j].userName;
          //       }
          //     }
          //   }
          // }).catch(err => {
          //   if (err === undefined) {
          //     _this.$message({
          //       message: '服务器响应异常！',
          //       type: 'error'
          //     });
          //     return false;
          //   }
          // });
        }
      }).catch(err => {
        if (err === undefined) {
          _this.$message({
            message: '服务器响应异常！',
            type: 'error'
          });
          return false;
        }
      });
    },

    // 通过申请
    agreed: function () {
      let _this = this;
      let row = _this.$route.query.datas;
      // 判断下一步审批节点
      // 判断当前审批节点 业务审批 | 财务审批
      let flowId = row.flowId;
      let prevNode = row.flowCurrentNode;

      // 申请通过判断当前节点的下一步审批节点
      let params = {
        prevNode,
        flowId
      };
      _this.$http.post('/api/findNextNode', params).then(res => {
        let {code, datas} = res;
        if (code === 0) {
          if (datas.flowNodeName.indexOf('财务') > -1 || datas.flowNodeName.indexOf('付款归档') > -1 || datas.flowNodeName.indexOf('地域出纳') > -1) {
            _this.financialNextNode(row, datas);
          } else if (datas.flowNodeRole.indexOf('发起人') > -1) {
            _this.financialNextNode(row, datas);
          } else if (datas.flowType === '结束') {
            _this.toNextEnd(row);
          } else {
            _this.toNextNode(row, datas);
          }
        }
      }).catch(err => {
        if (err === undefined) {
          this.$message({
            message: '服务器响应异常！',
            type: 'error'
          });
          return false;
        }
      });
    },

    // 获取所有节点
    getNode () {
      let _this = this;
      // 初始数据源
      let nodeDB = _this.$route.query.datas;
      // 当前指令Code
      let node = _this.$route.query.node;
      // 当前指令Code
      _this.isClaimant = _this.$route.query.addFlag;
      // 根据指令判断（发起流程、修改编辑、详细信息）
      // 我的发起
      if (node === 1) {
        _this.isSetUp = false;
        _this.isEditForm = true;
        let formDatas = JSON.parse(nodeDB.formJson);
        // 表单数据回显
        _this.editForm = formDatas;
        // 客户招待单数据回显
        _this.travelList = _this.editForm.travelList;
        // 优先级数据回显
        // _this.editForm.flowPriority = nodeDB.flowPriority === null ? '' : nodeDB.flowPriority.toString();
        // 消息推送数据回显
        // _this.editForm.msgPush = nodeDB.msgPush.split(',');
      }
      // 我的申请的
      if (node === 2 || node === 4 || node === 5 || node === 6) {
        this.isSetUp = false;
        this.showDatas = true;
        // 回显单据打印值
        _this.echoDatas = nodeDB;
        let formDatas = JSON.parse(nodeDB.formJson);
        // 获取处理历史
        _this.history(_this.echoDatas.flowCode, _this.echoDatas);
        // 表单数据回显
        _this.editForm = formDatas;
        // 差旅报销单数据回显
        _this.travelList = _this.editForm.travelList;
        // 判断是个人还是部门
        _this.travelList.map(item => {
          if (!item.travelId) {
            _this.isClaimant = false;
          } else {
            _this.isClaimant = true;
          }
        });
        // 优先级数据回显
        // _this.editForm.flowPriority = nodeDB.flowPriority === null ? '' : nodeDB.flowPriority.toString();
        // 消息推送数据回显
        // _this.editForm.msgPush = nodeDB.msgPush.split(',');
      }
      // 我的待办
      if (node === 3) {
        this.isSetUp = false;
        this.showDatas = true;
        this.isReview = true;
        // 回显单据打印值
        _this.echoDatas = nodeDB;
        let formDatas = JSON.parse(nodeDB.formJson);
        let flowDatas = JSON.parse(nodeDB.flowJson);
        let nodesList = flowDatas.nodes;
        let flowCurrentId = '';
        nodesList.map(item => {
          if (item.label === '打印单据') {
            flowCurrentId = item.id;
          }
        });
        if (nodeDB.flowCurrentNode === flowCurrentId) {
          this.isPrint = true;
        }
        // 获取处理历史
        _this.history(_this.echoDatas.flowCode, _this.echoDatas);
        // 表单数据回显
        _this.editForm = formDatas;
        // 客户招待单数据回显
        _this.travelList = _this.editForm.travelList;
        // 判断是个人还是部门
        _this.travelList.map(item => {
          if (!item.travelId) {
            _this.isClaimant = false;
          } else {
            _this.isClaimant = true;
          }
        });
        // this.editForm.pmp = formDatas.pmp;
        // this.editForm.flowPriority = nodeDB.flowPriority === null ? '' : nodeDB.flowPriority.toString();
        // this.editForm.msgPush = nodeDB.msgPush.split(',');
      }
    },

    // 正常财务财务线审批
    financialNextNode (row, nextNode) {
      let _this = this;
      // let rowDB = JSON.parse(row.formJson);
      if (nextNode.flowNodeRole === '发起人') {
        let params = {
          // 工单编号
          flowCode: row.flowCode,
          // 发起人
          flowOriginator: row.flowOriginator,
          // 当前审批节点
          flowCurrentNode: nextNode.flowNodeId,
          // 当前审批人
          flowCurrentUser: row.flowOriginator,
          // 工单状态
          status: 3,
          // 处理结果
          result: row.flowCurrentNode + ', 审批已通过！',
          // 工单优先级
          // flowPriority: _this.editForm.flowPriority,
          // 消息推送
          // msgPush: _this.editForm.msgPush.join(','),
          // 审批历史-审批节点
          flowNode: row.flowCurrentNode,
          // 审批历史-审批意见
          note: _this.editForm.note,
          // 审批历史-审批结果
          workResult: 2
        };
        this.$http.raw('api/updateOrderStatus', params).then(res => {
          let { code } = res;
          // 判断Code状态
          if (code === 0) {
            this.$message({
              message: '审批成功，已批准通过！',
              type: 'success'
            });
            _this.goBack();
          }
        }).catch(err => {
          if (err === undefined) {
            this.$message({
              message: '服务器响应异常！',
              type: 'error'
            });
            return false;
          }
        });
      } else {
        let params = {
          // 工单编号
          flowCode: row.flowCode,
          // 发起人
          flowOriginator: row.flowOriginator,
          // 当前审批节点
          flowCurrentNode: nextNode.flowNodeId,
          // 当前审批人
          flowCurrentUser: nextNode.note,
          // 工单状态
          status: 3,
          // 处理结果
          result: row.flowCurrentNode + ', 审批已通过！',
          // 工单优先级
          // flowPriority: _this.editForm.flowPriority,
          // 消息推送
          // msgPush: _this.editForm.msgPush.join(','),
          // 审批历史-审批节点
          flowNode: row.flowCurrentNode,
          // 审批历史-审批意见
          note: _this.editForm.note,
          // 审批历史-审批结果
          workResult: 2
        };
        _this.$http.raw('api/updateOrderStatus', params).then(res => {
          let { code } = res;
          // 判断Code状态
          if (code === 0) {
            _this.$message({
              message: '审批成功，已批准通过！',
              type: 'success'
            });
            _this.goBack();
          }
        }).catch(err => {
          if (err === undefined) {
            _this.$message({
              message: '服务器响应异常！',
              type: 'error'
            });
            return false;
          }
        });
      }
    },

    // 正常财务业务线审批  (根据审批授权金额，判断是否跳过后续报销业务线审批节点)
    async toNextNode (row, nextNode) {
      let _this = this;
      let rowDB = JSON.parse(row.formJson);
      // 判断当前节点角色授权金额是否满足
      // 部门
      let deptId = rowDB.compDeptUser.code[1];
      await this.getRoleList(deptId);
      await _this.getProcessNextNode(row, nextNode);

      setTimeout(() => {
        let travelMoney = [];
        travelMoney = rowDB.travelList.map(item => {
          if (item.travelId) {
            return item.subtotal;
          } else {
            return rowDB.sumMoney;
          }
        });
        let totalPrice = Math.max(...travelMoney);
        let userLines = [];
        let newUser = '';
        _this.rolesList.map(item => {
          if (nextNode.flowNodeRole === item.roleName) {
            newUser = item.userId;
            userLines.push(item);
          }
        });
        // 超出授权额度，下一步
        if (userLines.length > 0 && totalPrice >= userLines[0].money) {
          let users = [];
          // 查找下一步审批人
          _this.rolesList.map(item => {
            if (item.roleName === nextNode.flowNodeRole) {
              users.push(item.userId);
            }
          });
          let params = {
            // 工单编号
            flowCode: row.flowCode,
            // 发起人
            flowOriginator: row.flowOriginator,
            // 当前审批节点
            flowCurrentNode: _this.globalParams.globalFlowCurrentNode,
            // 当前审批人
            flowCurrentUser: _this.globalParams.globallowCurrentUser,
            // 工单状态
            status: 3,
            // 处理结果
            result: row.flowCurrentNode + ', 审批已通过！',
            // 工单优先级
            // flowPriority: _this.editForm.flowPriority,
            // 消息推送
            // msgPush: _this.editForm.msgPush.join(','),
            // 审批历史-审批节点
            flowNode: row.flowCurrentNode,
            // 审批历史-审批意见
            note: _this.editForm.note,
            // 审批历史-审批结果
            workResult: 2
          };
          _this.$http.raw('api/updateOrderStatus', params).then(res => {
            let { code } = res;
            // 判断Code状态
            if (code === 0) {
              _this.$message({
                message: '审批成功，已批准通过！',
                type: 'success'
              });
              _this.goBack();
            }
          }).catch(err => {
            if (err === undefined) {
              _this.$message({
                message: '服务器响应异常！',
                type: 'error'
              });
              return false;
            }
          });
        } else { // 不超出授权额度，跳至财务节点
          let rowBow = JSON.parse(row.flowJson).nodes;
          let locationUser = newUser;
          let nextNodeFlow = nextNode.flowNodeId;
          rowBow.map(item => {
            if (item.label === '地域出纳审核' && nextNode.flowNodeName.indexOf('付款审批') === -1) {
              // 南京分公司及南京地域的由李妍审核——HF00853S
              // if (this.$store.state.userinfo.location.indexOf('南京') > -1 || this.$store.state.userinfo.compId.indexOf('HFXXN') > -1) {
              //   locationUser = item.users[0];
              // } else { // 其他地域的由王燕燕审核——HF01280S
              //   locationUser = item.users[1];
              // }
              locationUser = item.users.join(',');
              nextNodeFlow = item.id;
            }
            if (item.label === '打印单据' && nextNode.flowNodeName.indexOf('付款审批') > -1) {
              locationUser = row.flowOriginator;
              nextNodeFlow = item.id;
            }
          });
          let params = {
            // 工单编号
            flowCode: row.flowCode,
            // 发起人
            flowOriginator: row.flowOriginator,
            // 当前审批节点
            flowCurrentNode: nextNodeFlow,
            // 当前审批人
            flowCurrentUser: locationUser,
            // 工单状态
            status: 3,
            // 处理结果
            result: row.flowCurrentNode + ', 审批已通过！',
            // 工单优先级
            // flowPriority: _this.editForm.flowPriority,
            // 消息推送
            // msgPush: _this.editForm.msgPush.join(','),
            // 审批历史-审批节点
            flowNode: row.flowCurrentNode,
            // 审批历史-审批意见
            note: _this.editForm.note,
            // 审批历史-审批结果
            workResult: 2
          };
          this.$http.raw('api/updateOrderStatus', params).then(res => {
            let { code } = res;
            // 判断Code状态
            if (code === 0) {
              this.$message({
                message: '审批成功，已批准通过！',
                type: 'success'
              });
              this.goBack();
            }
          }).catch(err => {
            if (err === undefined) {
              this.$message({
                message: '服务器响应异常！',
                type: 'error'
              });
              return false;
            }
          });
        }
      }, 1000);
    },

    // 正常审批结束
    toNextEnd (row) {
      let rowDB = JSON.parse(row.flowJson).nodes;
      let endNode = [];

      rowDB.map(item => {
        if (item.type === '结束') {
          endNode.push(item.id);
        }
      });

      let params = {
        // 工单编号
        flowCode: row.flowCode,
        // 发起人
        flowOriginator: row.flowOriginator,
        // 当前审批节点
        flowCurrentNode: endNode[0],
        // 当前审批人
        flowCurrentUser: '',
        // 工单状态
        status: 4,
        // 处理结果
        result: row.flowCurrentNode + ', 审批已通过并结束！',
        // 工单优先级
        // flowPriority: '',
        // 消息推送
        // msgPush: '',
        // 审批历史-审批节点
        flowNode: row.flowCurrentNode,
        // 审批历史-审批意见
        note: this.editForm.note,
        // 审批历史-审批结果
        workResult: 2
      };

      this.$http.raw('api/updateOrderStatus', params).then(res => {
        let { code } = res;
        // 判断Code状态
        if (code === 0) {
          this.$message({
            message: '审批成功，已批准通过！',
            type: 'success'
          });
          this.goBack();
        }
      }).catch(err => {
        if (err === undefined) {
          this.$message({
            message: '服务器响应异常！',
            type: 'error'
          });
          return false;
        }
      });
    },

    // 拒绝申请
    refused: function () {
      let row = this.$route.query.datas;

      let _this = this;
      // 工单编号
      let flowCode = row.flowCode;
      // 驳回直接退回到申请人
      let logUser = row.flowOriginator;

      // 收集请求参数
      let userResult = {
        orderCode: flowCode,
        userId: logUser
      };
      // 根据操作历史回溯发起人、发起节点
      _this.$http.raw('/api/findResults', userResult).then(res => {
        let { code, datas } = res;
        if (code === 0) {
          // 发起节点
          let setUpNodeId = [];
          datas.map(item => {
            if (item.result === 1 && item.note === '发起申请') {
              setUpNodeId.push(item.flowNode);
            }
          });

          let params = {
            // 工单编号
            flowCode: row.flowCode,
            // 发起人
            flowOriginator: row.flowOriginator,
            // 当前审批节点
            flowCurrentNode: setUpNodeId[0],
            // 当前审批人
            flowCurrentUser: row.flowOriginator,
            // 工单状态
            status: 5,
            // 处理结果
            result: row.flowCurrentNode + ', 申请被驳回！',
            // 工单优先级
            // flowPriority: this.editForm.flowOriginator,
            // 消息推送
            // msgPush: this.editForm.msgPush.join(','),
            // 审批历史-审批节点
            flowNode: row.flowCurrentNode,
            // 审批历史-审批意见
            note: this.editForm.note,
            // 审批历史-审批结果
            workResult: 3
          };

          this.$http.raw('api/updateOrderStatus', params).then(res => {
            let { code } = res;
            // 判断Code状态
            if (code === 0) {
              this.$message({
                message: '审批成功，已驳回申请！',
                type: 'success'
              });
              this.goBack();
            }
          }).catch(err => {
            if (err === undefined) {
              this.$message({
                message: '服务器响应异常！',
                type: 'error'
              });
              return false;
            }
          });
        }
      }).catch(err => {
        if (err === undefined) {
          this.$message({
            message: '服务器响应异常！',
            type: 'error'
          });
          return false;
        }
      });
    },

    // 获取项目成员
    getMembers () {
      let _this = this;
      let params = {
        proId: ''
      };
      _this.travelList.map(item => {
        params.proId = item.proId;
        if (params.proId) {
          return _this.$http.post('api/findAllProMember', params).then(res => {
            let { code, datas } = res;
            if (code === 0) {
              _this.meblist = datas;
              _this.meblist.map(item => {
                if (item.role === '项目经理') {
                  return _this.proMsgId.push(item.userId);
                }
              });
            }
          }).catch(err => {
            if (err === undefined) {
              _this.$message({
                message: '服务器响应异常！',
                type: 'error'
              });
              return false;
            }
          });
        }
      });
    },
    // 数组去除空值
    removeEmpty (arr) {
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] === '') {
          arr.splice(i, 1);
          i = i - 1;
        }
      }
      return arr;
    },
    // 数组去除0值
    removeZero (arr) {
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] === 0) {
          arr.splice(i, 1);
          i = i - 1;
        }
      }
      return arr;
    },
    // 提交
    onSubmit () {
      let _this = this;
      _this.$nextTick(async () => {
        // 未填开始时间，结束时间，出发地，目的地，金额，关联项目时提示
        if (!_this.travelList.length) {
          this.$message.error('请添加差旅信息！');
          return;
        }
        if (_this.travelList && _this.travelList.length > 0) {
          let totalMoney = 0;
          let totalStart = [];
          let totalEnd = [];
          let totalDeparture = [];
          let totalDestination = [];
          let totalSub = [];
          let totalDaySize = [];
          _this.travelList.map(item => {
            // 转换金额大写
            item.capital = digitUppercase(item.subtotal);
            totalMoney += item.subtotal;
            totalStart.push(item.startTime);
            totalEnd.push(item.endTime);
            totalDeparture.push(item.departure);
            totalDestination.push(item.destination);
            totalSub.push(item.subtotal);
            totalDaySize.push(item.daySize);
          });
          this.removeEmpty(totalStart);
          this.removeEmpty(totalEnd);
          this.removeEmpty(totalDeparture);
          this.removeEmpty(totalDestination);
          this.removeZero(totalSub);
          this.removeZero(totalDaySize);
          if (_this.isClaimant && totalSub.length !== _this.travelList.length) {
            this.$message.error('请填写报销人！');
            return;
          }
          let proMsgArr = [];
          let socializePriceArr = [];
          _this.travelList.map(item => {
            if (item.proId) {
              proMsgArr.push(item.proId);
              if (item.socializePrice) {
                socializePriceArr.push(item.socializePrice);
              }
            }
          });
          if (proMsgArr.length !== _this.travelList.length) {
            this.$message.error('请填写报销人关联项目！');
            return;
          }
          if (totalStart.length !== _this.travelList.length) {
            this.$message.error('请填写开始时间！');
            return;
          }
          if (totalEnd.length !== _this.travelList.length) {
            this.$message.error('请填写结束时间！');
            return;
          }
          if (totalDeparture.length !== _this.travelList.length) {
            this.$message.error('请填写出发地！');
            return;
          }
          if (totalDestination.length !== _this.travelList.length) {
            this.$message.error('请填写目的地！');
            return;
          }
          if (!totalMoney || totalSub.length !== _this.travelList.length) {
            this.$message.error('请填写金额！');
            return;
          }
          // if (!_this.editForm.proId) {
          //   this.$message.error('请选择关联项目！');
          //   return;
          // }
          if (totalDaySize.length !== _this.travelList.length) {
            this.$message.error('请填写出差天数！');
            return;
          }
        }
        // if (!_this.editForm.proId) {
        //   this.$message.error('请选择关联项目！');
        //   return;
        // }
        let file = document.querySelector('input[type=file]').files[0];
        if (file) {
          let formData = new FormData(); // 创建form对象
          formData.append('uploadFile', file);
          _this.$http.upload('api/uploadFile', formData).then(async res => {
            let { code, datas } = res;
            if (code === 0) {
              await _this.getMembers();

              setTimeout(() => {
                // 存储项目经理信息
                _this.editForm.msgList = [...new Set(_this.proMsgId)];
                _this.editForm.filePath = datas;
                // 当前登录人信息
                let user = this.$store.state.userinfo;
                // 单据编号前缀
                _this.editForm.formNo = 'CLBXD-' + user.compId + '-';
                // 公司/部门/申请人 编码|名称
                _this.editForm.compDeptUser = {
                  code: [user.compId, user.deptId, user.userId, user.deptName, user.userName],
                  value: user.compName + '>' + user.deptName + '>' + user.userName
                };
                // 判断是否存在客户招待单
                _this.editForm.travelList = _this.travelList.length > 0 ? _this.travelList : [];
                // 计算合计费用
                for (let i = _this.editForm.travelList.length; i--;) {
                  _this.editForm.sumMoney += parseFloat(_this.editForm.travelList[i].subtotal);
                }
                // 转换金额大写
                // _this.editForm.capital = digitUppercase(_this.editForm.sumMoney);

                _this.nextFlows(1, user, _this.editForm);
              }, 1000);
            }
          }).catch(err => {
            if (err === undefined) {
              _this.$message({
                message: '服务器响应异常！',
                type: 'error'
              });
              return false;
            }
          });
        } else {
          await _this.getMembers();

          setTimeout(() => {
            // 存储项目经理信息
            _this.editForm.msgList = [...new Set(_this.proMsgId)];
            // 当前登录人信息
            let user = this.$store.state.userinfo;
            // 单据编号前缀
            _this.editForm.formNo = 'CLBXD-' + user.compId + '-';
            // 公司/部门/申请人 编码|名称
            _this.editForm.compDeptUser = {
              code: [user.compId, user.deptId, user.userId, user.deptName, user.userName],
              value: user.compName + '>' + user.deptName + '>' + user.userName
            };
            // 判断是否存在客户招待单
            _this.editForm.travelList = _this.travelList.length > 0 ? _this.travelList : [];
            // 计算合计费用
            for (let i = _this.editForm.travelList.length; i--;) {
              _this.editForm.sumMoney += parseFloat(_this.editForm.travelList[i].subtotal);
            }
            // 转换金额大写
            // _this.editForm.capital = digitUppercase(_this.editForm.sumMoney);
            _this.nextFlows(1, user, _this.editForm);
          }, 1000);
        }
      });
    },

    // 参数： 申请人userId 审批角色池  审批模型数据源
    // 统一处理（返回 发起节点、 下一审批节点、 下一节点审批人）
    async nextFlows (subCode, users, formJSON) {
      let _this = this;
      // 初始数据源
      let nodeDB = _this.$route.query.datas;
      let flowJSON = JSON.parse(nodeDB.flowJson).nodes;
      // let bbb = formJSON;
      // 过滤申请人是否在审批节点内
      let roleNode = [];
      _this.rolesList.map(item => {
        if (item.userId === users.userId) {
          roleNode.push(item);
        }
      });
      // 获取多人并发的项目经理数据
      await _this.getMembers();
      // 当申请人在角色池内，取同一人不同角色的最高角色为申请人
      let maxValue = Math.max.apply(Math, roleNode.map((o) => { return o.roleId; }));
      let newRoleNode = _this.rolesList.filter(item => parseInt(item.roleId) === maxValue);
      // 申请人在业务线角色池内审批节点内,直接跳到下一个节点
      if (newRoleNode.length > 0) {
        let nextNode = flowJSON.find(item => {
          if (item.label === newRoleNode[0].roleName) {
            return item;
          }
        });
        await _this.getNextNode(nextNode.id, 1);
        setTimeout(() => {
          let paramsFlow = {
            tblWorkOrder: {
              // 关联流程ID
              flowId: nodeDB.flowId,
              // 流程JSON
              flowJson: nodeDB.flowJson,
              // 表单JSON
              formJson: JSON.stringify(formJSON),
              // 工单处理记录ID  审批记录表
              // workOrderRecord: '',
              // 工单当前处理节点
              flowCurrentNode: subCode === 0 ? nextNode.id : _this.globalParams.globalFlowCurrentNode,
              // 工单当前处理人ID
              flowCurrentUser: subCode === 0 ? users.userId : _this.globalParams.globallowCurrentUser,
              // 工单优先级
              // flowPriority: formJSON.flowPriority,
              // 流程工单发起人
              flowOriginator: subCode === 0 ? '' : users.userId,
              // 流程工单发起时间
              flowOriginatorTime: subCode === 0 ? '' : new Date(),
              // 工单状态
              status: subCode === 0 ? 1 : 2,
              // 工单处理结果
              result: subCode === 0 ? '暂存草稿' : '已发起'
              // 消息推送
              // msgPush: formJSON.msgPush.join(',')
            },
            tblWorkResult: subCode === 0 ? {} : {flowNode: nextNode.id, note: '发起申请', result: 1}
          };
          subCode === 0 ? _this.staging(paramsFlow) : _this.init(paramsFlow);
        }, 1000);
      } else { // 不在角色池内;
        // 有项目并且是项目经理和没有项目的，跳3个节点比较，flag为2
        let newProList = [...new Set(_this.proMsgId)];
        if ((newProList.length && newProList.indexOf(users.userId) > -1) || (newProList.length === 0)) {
          let nextNode = flowJSON.find(item => {
            if (item.type === '开始') {
              return item;
            }
          });
          await _this.getNextNode(nextNode.id, 2); // flag为2
          setTimeout(() => {
            let paramsFlow = {
              tblWorkOrder: {
                // 关联流程ID
                flowId: nodeDB.flowId,
                // 流程JSON
                flowJson: nodeDB.flowJson,
                // 表单JSON
                formJson: JSON.stringify(_this.editForm),
                // 工单当前处理节点
                flowCurrentNode: subCode === 0 ? nextNode.id : _this.globalParams.globalFlowCurrentNode,
                // 工单当前处理人ID
                flowCurrentUser: subCode === 0 ? users.userId : _this.globalParams.globallowCurrentUser,
                // 工单优先级
                // flowPriority: _this.editForm.flowPriority,
                // 流程工单发起人
                flowOriginator: subCode === 0 ? '' : users.userId,
                // 流程工单发起时间
                flowOriginatorTime: subCode === 0 ? '' : new Date(),
                // 工单状态
                status: subCode === 0 ? 1 : 2,
                // 工单处理结果
                result: subCode === 0 ? '暂存草稿' : '已发起'
                // 消息推送
                // msgPush: _this.editForm.msgPush.join(',')
              },
              tblWorkResult: subCode === 0 ? {} : {flowNode: nextNode.id, note: '发起申请', result: 1}
            };
            subCode === 0 ? _this.staging(paramsFlow) : _this.init(paramsFlow);
          }, 1000);
        } else { // 有项目，但不是项目经理的跳2个节点比较，flag为1
          let nextNode = flowJSON.find(item => {
            if (item.type === '开始') {
              return item;
            }
          });
          await _this.getNextNode(nextNode.id, 1); // flag为1
          setTimeout(() => {
            let paramsFlow = {
              tblWorkOrder: {
                // 关联流程ID
                flowId: nodeDB.flowId,
                // 流程JSON
                flowJson: nodeDB.flowJson,
                // 表单JSON
                formJson: JSON.stringify(_this.editForm),
                // 工单当前处理节点
                flowCurrentNode: subCode === 0 ? nextNode.id : _this.globalParams.globalFlowCurrentNode,
                // 工单当前处理人ID
                flowCurrentUser: subCode === 0 ? users.userId : _this.globalParams.globallowCurrentUser,
                // 工单优先级
                // flowPriority: _this.editForm.flowPriority,
                // 流程工单发起人
                flowOriginator: subCode === 0 ? '' : users.userId,
                // 流程工单发起时间
                flowOriginatorTime: subCode === 0 ? '' : new Date(),
                // 工单状态
                status: subCode === 0 ? 1 : 2,
                // 工单处理结果
                result: subCode === 0 ? '暂存草稿' : '已发起'
                // 消息推送
                // msgPush: _this.editForm.msgPush.join(',')
              },
              tblWorkResult: subCode === 0 ? {} : {flowNode: nextNode.id, note: '发起申请', result: 1}
            };
            subCode === 0 ? _this.staging(paramsFlow) : _this.init(paramsFlow);
          }, 1000);
        };
      };
    },

    staging (paramsFlow) {
      let _this = this;
      _this.$http.raw('api/insertWorkOrder', paramsFlow).then(res => {
        let { code } = res;
        // 判断Code状态
        if (code === 0) {
          _this.$message({
            message: '已保存草稿！',
            type: 'success'
          });
          _this.goBack();
        }
      }).catch(err => {
        if (err === undefined) {
          _this.$message({
            message: '服务器响应异常！',
            type: 'error'
          });
          return false;
        }
      });
    },

    init (paramsFlow) {
      let _this = this;
      _this.$http.raw('api/insertWorkOrder', paramsFlow).then(res => {
        let { code } = res;
        // 判断Code状态
        if (code === 0) {
          this.$message({
            message: '发起流程成功！',
            type: 'success'
          });
          this.goBack();
        }
      }).catch(err => {
        if (err === undefined) {
          this.$message({
            message: '服务器响应异常！',
            type: 'error'
          });
          return false;
        }
      });
    },

    // 数据暂存操作
    save () {
      let _this = this;
      // 初始数据源
      // let nodeDB = this.$route.query.datas;
      // 开始时间
      // startTime: '',
      // 结束时间
      // endTime: '',
      // 出发地
      // departure: '',
      // 目的地
      // destination: '',
      _this.$nextTick(async () => {
        // 未填开始时间，结束时间，出发地，目的地，金额，关联项目时提示
        if (!_this.travelList.length) {
          this.$message.error('请添加差旅信息！');
          return;
        }
        if (_this.travelList && _this.travelList.length > 0) {
          let totalMoney = 0;
          let totalStart = [];
          let totalEnd = [];
          let totalDeparture = [];
          let totalDestination = [];
          let totalSub = [];
          let totalDaySize = [];
          _this.travelList.map(item => {
            // 转换金额大写
            item.capital = digitUppercase(item.subtotal);
            totalMoney += item.subtotal;
            totalStart.push(item.startTime);
            totalEnd.push(item.endTime);
            totalDeparture.push(item.departure);
            totalDestination.push(item.destination);
            totalSub.push(item.subtotal);
            totalDaySize.push(item.daySize);
          });
          this.removeEmpty(totalStart);
          this.removeEmpty(totalEnd);
          this.removeEmpty(totalDeparture);
          this.removeEmpty(totalDestination);
          this.removeZero(totalSub);
          this.removeZero(totalDaySize);
          if (_this.isClaimant && totalSub.length !== _this.travelList.length) {
            this.$message.error('请填写报销人！');
            return;
          }
          let proMsgArr = [];
          let socializePriceArr = [];
          _this.travelList.map(item => {
            if (item.proId) {
              proMsgArr.push(item.proId);
              if (item.socializePrice) {
                socializePriceArr.push(item.socializePrice);
              }
            }
          });
          if (proMsgArr.length !== _this.travelList.length) {
            this.$message.error('请填写报销人关联项目！');
            return;
          }
          if (totalStart.length !== _this.travelList.length) {
            this.$message.error('请填写开始时间！');
            return;
          }
          if (totalEnd.length !== _this.travelList.length) {
            this.$message.error('请填写结束时间！');
            return;
          }
          if (totalDeparture.length !== _this.travelList.length) {
            this.$message.error('请填写出发地！');
            return;
          }
          if (totalDestination.length !== _this.travelList.length) {
            this.$message.error('请填写目的地！');
            return;
          }
          if (!totalMoney || totalSub.length !== _this.travelList.length) {
            this.$message.error('请填写金额！');
            return;
          }
          if (totalDaySize.length !== _this.travelList.length) {
            this.$message.error('请填写出差天数！');
            return;
          }
          // if (!_this.editForm.proId) {
          //   this.$message.error('请选择关联项目！');
          //   return;
          // }
        }
        // if (!_this.editForm.proId) {
        //   this.$message.error('请选择关联项目！');
        //   return;
        // }
        let file = document.querySelector('input[type=file]').files[0];
        if (file) {
          let formData = new FormData(); // 创建form对象
          formData.append('uploadFile', file);
          _this.$http.upload('api/uploadFile', formData).then(async res => {
            let { code, datas } = res;
            if (code === 0) {
              await _this.getMembers();

              setTimeout(() => {
                // 存储项目经理信息
                _this.editForm.msgList = [...new Set(_this.proMsgId)];
                _this.editForm.filePath = datas;
                // 当前登录人信息
                let user = this.$store.state.userinfo;
                // 单据编号前缀
                _this.editForm.formNo = 'CLBXD-' + user.compId + '-';
                // 公司/部门/申请人 编码|名称
                _this.editForm.compDeptUser = {
                  code: [user.compId, user.deptId, user.userId, user.deptName, user.userName],
                  value: user.compName + '>' + user.deptName + '>' + user.userName
                };
                _this.editForm.sumMoney = 0;
                // 判断是否存在客户招待单
                _this.editForm.travelList = _this.travelList.length > 0 ? _this.travelList : [];
                // 计算合计费用
                for (let i = _this.editForm.travelList.length; i--;) {
                  _this.editForm.sumMoney += parseFloat(_this.editForm.travelList[i].subtotal);
                }
                // 转换金额大写
                // _this.editForm.capital = digitUppercase(_this.editForm.sumMoney);

                _this.nextFlows(0, user, _this.editForm);
              }, 1000);
            }
          }).catch(err => {
            if (err === undefined) {
              _this.$message({
                message: '服务器响应异常！',
                type: 'error'
              });
              return false;
            }
          });
        } else {
          await _this.getMembers();

          setTimeout(() => {
            // 存储项目经理信息
            _this.editForm.msgList = [...new Set(_this.proMsgId)];
            // 当前登录人信息
            let user = this.$store.state.userinfo;
            // 单据编号前缀
            _this.editForm.formNo = 'CLBXD-' + user.compId + '-';
            // 公司/部门/申请人 编码|名称
            _this.editForm.compDeptUser = {
              code: [user.compId, user.deptId, user.userId, user.deptName, user.userName],
              value: user.compName + '>' + user.deptName + '>' + user.userName
            };
            // 判断是否存在客户招待单
            _this.editForm.travelList = _this.travelList.length > 0 ? _this.travelList : [];
            // 计算合计费用
            _this.editForm.sumMoney = 0;
            for (let i = _this.editForm.travelList.length; i--;) {
              _this.editForm.sumMoney += parseFloat(_this.editForm.travelList[i].subtotal);
            }
            // 转换金额大写
            // _this.editForm.capital = digitUppercase(_this.editForm.sumMoney);
            _this.nextFlows(0, user, _this.editForm);
          }, 1000);
        }
      });
    },

    // 查询所有项目
    // getProList () {
    //   let _this = this;
    //   let params = {
    //     userId: _this.$store.state.userinfo.userId
    //   };
    //   _this.$http.post('/api/findMyPros', params).then(res => {
    //     let { code, datas } = res;
    //     if (code === 0) {
    //       _this.proList = datas;
    //     }
    //   }).catch(err => {
    //     if (err === undefined) {
    //       _this.$message({
    //         message: '服务器响应异常！',
    //         type: 'error'
    //       });
    //       return false;
    //     }
    //   });
    // },

    // 获取选择项目名称
    // handleChange (val) {
    //   let _this = this;
    //   let obj;
    //   if (val) {
    //     obj = _this.proList.find(item => { // 这里的userList就是上面遍历的数据源
    //       return item.id === val; // 筛选出匹配数据
    //     });
    //     _this.editForm.proName = obj.proName;
    //   }
    // },

    // 修改表单数据
    edit () {
      let _this = this;
      let row = _this.$route.query.datas;

      _this.$nextTick(async () => {
        // 未填报销人或金额时提示
        if (_this.travelList && _this.travelList.length > 0) {
          let totalMoney = 0;
          let totalUserList = [];
          _this.travelList.map(item => {
            // 转换金额大写
            item.capital = digitUppercase(item.subtotal);
            totalMoney += item.subtotal;
            if (item.travelId) {
              totalUserList.push(item.travelId);
            }
          });
          _this.editForm.sumMoney = totalMoney;
          // 转换金额大写
          // _this.editForm.capital = digitUppercase(_this.editForm.sumMoney);
          if (!totalMoney) {
            this.$message.error('请填写金额！');
            return;
          }
          if (_this.isClaimant && totalUserList.length !== _this.travelList.length) {
            this.$message.error('请填写报销人！');
            return;
          }
        }
        let file = document.querySelector('input[type=file]').files[0];
        if (file) {
          let formData = new FormData(); // 创建form对象
          formData.append('uploadFile', file);
          _this.$http.upload('api/uploadFile', formData).then(async res => {
            let { code, datas } = res;
            if (code === 0) {
              // 获取多人并发的项目经理数据
              await _this.getMembers();
              setTimeout(() => {
                // 存储项目经理信息
                _this.editForm.msgList = [...new Set(_this.proMsgId)];
                _this.editForm.filePath = datas;
                // 判断是否存在出差单
                _this.editForm.travelList = _this.travelList.length > 0 ? _this.travelList : [];
                _this.editForm.sumMoney = 0;
                // 计算合计费用
                for (let i = _this.editForm.travelList.length; i--;) {
                  _this.editForm.sumMoney += parseFloat(_this.editForm.travelList[i].subtotal);
                }
                // 转换金额大写
                // _this.editForm.capital = digitUppercase(_this.editForm.sumMoney);

                let params = {
                  flowCode: row.flowCode,
                  // 表单JSON
                  formJson: JSON.stringify(_this.editForm)
                  // 工单优先级
                  // flowPriority: _this.editForm.flowPriority,
                  // 消息推送
                  // msgPush: _this.editForm.msgPush.join(',')
                };
                _this.$http.post('api/updateWorkOrder', params).then(res => {
                  let { code } = res;
                  // 判断Code状态
                  if (code === 0) {
                    _this.$message({
                      message: '已保存修改！',
                      type: 'success'
                    });
                    _this.goBack();
                  }
                }).catch(err => {
                  if (err === undefined) {
                    _this.$message({
                      message: '服务器响应异常！',
                      type: 'error'
                    });
                    return false;
                  }
                });
              }, 1000);
            }
          }).catch(err => {
            if (err === undefined) {
              _this.$message({
                message: '服务器响应异常！',
                type: 'error'
              });
              return false;
            }
          });
        } else {
          // 获取多人并发的项目经理数据
          await _this.getMembers();
          setTimeout(() => {
            // 存储项目经理信息
            _this.editForm.msgList = [...new Set(_this.proMsgId)];
            // 判断是否存在出差单
            _this.editForm.travelList = _this.travelList.length > 0 ? _this.travelList : [];
            // 计算合计费用
            _this.editForm.sumMoney = 0;
            for (let i = _this.editForm.travelList.length; i--;) {
              _this.editForm.sumMoney += parseFloat(_this.editForm.travelList[i].subtotal);
            }
            // 转换金额大写
            // _this.editForm.capital = digitUppercase(_this.editForm.sumMoney);

            let params = {
              flowCode: row.flowCode,
              // 表单JSON
              formJson: JSON.stringify(_this.editForm)
              // 工单优先级
              // flowPriority: _this.editForm.flowPriority,
              // 消息推送
              // msgPush: _this.editForm.msgPush.join(',')
            };
            _this.$http.post('api/updateWorkOrder', params).then(res => {
              let { code } = res;
              // 判断Code状态
              if (code === 0) {
                _this.$message({
                  message: '已保存修改！',
                  type: 'success'
                });
                _this.goBack();
              }
            }).catch(err => {
              if (err === undefined) {
                _this.$message({
                  message: '服务器响应异常！',
                  type: 'error'
                });
                return false;
              }
            });
          }, 1000);
        }
      });
    },
    // 获取所有用户
    getUsers () {
      let _this = this;
      let params = {
        status: ''
      };
      return _this.$http.post('api/findAllBaseUsers', params).then(res => {
        let { code, datas } = res;
        // 判断Code状态
        if (code === 0) {
          _this.users = datas;
          return _this.users;
        }
      }).catch(err => {
        if (err === undefined) {
          _this.$message({
            message: '服务器响应异常！',
            type: 'error'
          });
          return false;
        }
      });
    },
    // 返回上一步
    goBack () {
      this.$router.go(-1);
    },
    // 查询所有项目
    getProList (val) {
      let _this = this;
      let params = {
        userId: val
      };
      _this.$http.post('/api/findMyPros', params).then(res => {
        let { code, datas } = res;
        if (code === 0) {
          _this.travelList.map(item => {
            let userId = item.travelId.split('-')[0];
            if (userId === params.userId) {
              item.proList = datas;
            }
          });
        }
      }).catch(err => {
        if (err === undefined) {
          _this.$message({
            message: '服务器响应异常！',
            type: 'error'
          });
          return false;
        }
      });
    },

    // 打印单据事件，当点击打印单据时，自动审核通过，进入下一个节点
    prints () {
      let _this = this;
      let row = _this.$route.query.datas;
      // 打印时去掉关联项目
      _this.isProTitle = false;
      // 判断当前审批节点 业务审批 | 财务审批
      let flowId = row.flowId;
      let prevNode = row.flowCurrentNode;

      // 申请通过判断当前节点的下一步审批节点
      let params = {
        prevNode,
        flowId
      };
      _this.$http.post('/api/findNextNode', params).then(res => {
        let {code, datas} = res;
        if (code === 0) {
          let params = {
            // 工单编号
            flowCode: row.flowCode,
            // 发起人
            flowOriginator: row.flowOriginator,
            // 当前审批节点
            flowCurrentNode: datas.flowNodeId,
            // 当前审批人
            flowCurrentUser: datas.note,
            // 工单状态
            status: 3,
            // 处理结果
            result: row.flowCurrentNode + ', 审批已通过！',
            // 工单优先级
            // flowPriority: _this.editForm.flowPriority,
            // 消息推送
            // msgPush: _this.editForm.msgPush.join(','),
            // 审批历史-审批节点
            flowNode: row.flowCurrentNode,
            // 审批历史-审批意见
            note: _this.editForm.note,
            // 审批历史-审批结果
            workResult: 2
          };
          this.$http.raw('api/updateOrderStatus', params).then(res => {
            let { code } = res;
            // 判断Code状态
            if (code === 0) {
              this.$message({
                message: '审批成功，已批准通过！',
                type: 'success'
              });
              this.goBack();
            }
          }).catch(err => {
            if (err === undefined) {
              this.$message({
                message: '服务器响应异常！',
                type: 'error'
              });
              return false;
            }
          });
        }
      });
    },

    // 查出当前申请人所在部门角色池领导
    getRoleList (deptIds) {
      let _this = this;
      // 当前登录人信息
      let user = this.$store.state.userinfo;
      let deptRole = {
        deptId: deptIds || user.deptId
      };
      return _this.$http.raw('/api/findUserRoles', deptRole).then(res => {
        let { code, datas } = res;
        if (code === 0) {
          _this.rolesList = JSON.parse(JSON.stringify(datas));
          return _this.rolesList;
        }
      });
    },

    // 发起申请时连续查询两个节点
    getNextNode (prevNode, flag) {
      let _this = this;
      // 初始数据源
      let nodeDB = _this.$route.query.datas;
      let firstParams = {
        flowId: nodeDB.flowId,
        prevNode: prevNode
      };
      _this.firstNextRole = [...new Set(_this.proMsgId)].join(',');
      return _this.$http.post('/api/findNextNode', firstParams).then(firstRes => {
        let { code } = firstRes;
        if (code === 0) {
          _this.rolesList.map(item => {
            if (item.roleName === firstRes.datas.flowNodeRole) {
              _this.firstNextRole = JSON.parse(JSON.stringify(item.userId)); // 下一节点审核人id
            }
          });
          let secondParams = {
            flowId: nodeDB.flowId,
            prevNode: firstRes.datas.flowNodeId
          };
          return _this.$http.post('/api/findNextNode', secondParams).then(secondRes => {
            let { code } = secondRes;
            if (code === 0) {
              _this.rolesList.map(item => {
                if (item.roleName === secondRes.datas.flowNodeRole) {
                  _this.secondNextRole = JSON.parse(JSON.stringify(item.userId)); // 下下一节点审核人id
                }
              });
              if (flag === 2) { // 查询3步，不走项目经理节点
                let thirdParams = {
                  flowId: nodeDB.flowId,
                  prevNode: secondRes.datas.flowNodeId
                };
                return _this.$http.post('/api/findNextNode', thirdParams).then(thirdRes => {
                  let { code } = thirdRes;
                  if (code === 0) {
                    _this.rolesList.map(item => {
                      if (item.roleName === thirdRes.datas.flowNodeRole) {
                        _this.thirdNextRole = JSON.parse(JSON.stringify(item.userId)); // 下下一节点审核人id
                      }
                    });
                    // 第一个和第二个人相同，继续往下找
                    if (_this.secondNextRole === _this.thirdNextRole) {
                      this.getNextNode(secondRes.datas.flowNodeId, 1);
                    } else { // 第一个人和第二个不同，将第一个人的值赋值
                      _this.globalParams = {
                        globalFlowCurrentNode: secondRes.datas.flowNodeId,
                        globallowCurrentUser: _this.secondNextRole
                      };
                      return _this.globalParams;
                    }
                  }
                });
              } else { // 查询2步，走项目经理节点
                // 第一个和第二个人相同，继续往下找
                if (_this.firstNextRole === _this.secondNextRole) {
                  this.getNextNode(firstRes.datas.flowNodeId, 1);
                } else { // 第一个人和第二个不同，将第一个人的值赋值
                  _this.globalParams = {
                    globalFlowCurrentNode: firstRes.datas.flowNodeId,
                    globallowCurrentUser: _this.firstNextRole
                  };
                  return _this.globalParams;
                }
              }
            }
          });
        }
      });
    },

    // 中间同意过程的连续节点压缩
    getProcessNextNode (row, nextNode) {
      let _this = this;
      let nodeDB = _this.$route.query.datas;
      let firstRoleList = [];
      _this.rolesList.map(item => {
        if (item.roleName === nextNode.flowNodeRole) {
          firstRoleList.push(item.userId);
          _this.firstNextRole = JSON.parse(JSON.stringify(item.userId)); // 下一节点审核人id
        }
      });
      if (nextNode.flowNodeName.indexOf('财务') > -1 || nextNode.flowNodeName.indexOf('付款归档') > -1 || nextNode.flowNodeName.indexOf('地域出纳') > -1) {
        _this.financialNextNode(row, nextNode);
      }
      // 要求再找下一个节点
      let params = {
        flowId: nodeDB.flowId,
        prevNode: nextNode.flowNodeId
      };
      // 通过当前人所在节点  流程编号 查询下一步审批节点
      return _this.$http.post('/api/findNextNode', params).then(res => {
        let {code} = res;
        if (code === 0) {
          let secondRoleList = [];
          _this.rolesList.map(item => {
            if (item.roleName === res.datas.flowNodeRole) {
              secondRoleList.push(item.userId);
              _this.secondNextRole = JSON.parse(JSON.stringify(item.userId)); // 下一节点审核人id
            }
          });
          if (firstRoleList.length && secondRoleList.length && _this.firstNextRole === _this.secondNextRole) {
            this.getProcessNextNode(row, res.datas);
          } else {
            _this.globalParams = {
              globalFlowCurrentNode: nextNode.flowNodeId,
              globallowCurrentUser: _this.firstNextRole
            };
            return _this.globalParams;
          }
        }
      });
    },
    // 个人报销时请求当前人所在项目
    // 获取报销人下拉数据
    getSingleMsg () {
      let _this = this;
      let userId = _this.$store.state.userinfo.userId;
      let params = {
        userId: userId
      };
      _this.$http.post('/api/findMyPros', params).then(res => {
        let { code, datas } = res;
        if (code === 0) {
          _this.travelList.map(item => {
            item.proList = datas;
          });
        }
      }).catch(err => {
        if (err === undefined) {
          _this.$message({
            message: '服务器响应异常！',
            type: 'error'
          });
          return false;
        }
      });
    }
  },
  async created () {
    // 查询所有项目
    // this.getProList();

    // 获取所有用户
    await this.getUsers();

    // 查出当前申请人所在部门角色池领导
    this.getRoleList('');

    // 获取节点数据
    this.getNode();
  },
  watch: {
    // 监听个人报销或是部门报销
    isClaimant: {
      handler (newVal, oldVal) {
        let _this = this;
        _this.isClaimant = newVal;
      }
    }
  }
};
</script>

<style lang="scss" scoped>
@import './index.scss';
</style>
<style lang="scss">
  .no-invoice-box {
    margin-bottom: 20px;
  }
  .invoice-box {
    margin-bottom: 250px;
    height: 600px;
  }
</style>
